オープンソースのデータ管理システム「CKAN」を試してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
最近「データカタログ」について調べていたのですが、自治体のオープンデータサイト「自治体オープンデータ」でも「データカタログ」を利用していることを知りました。
「自治体オープンデータ」は,オープンソースソフトウェアのCKANを利用して,データカタログの機能を提供しております。
この「CKAN」というシステムが、どのようなものか興味を持ったので、調査して実際に少し触ってみたいと思います。
CKANとは?
CKAN(Comprehensive Knowledge Archive Network)はオープンソースのデータ管理システムです。Open Knowledge Foundationによって開発され、様々な国や自治体におけるオープンデータ公開サイトで利用されています。
利用例
CKANはカナダ、アメリカ、オーストラリアなどで利用されており、もちろん日本でも国や様々な自治体で利用されています。例として、以下のようなサイトで利用されています。
機能
CKANの主な機能としては以下になります。
- API
- Datastore
- Extend
- Geospatial
- Metadata
- Manage data
- Search
- Themeable
- Visualization
- Federate
- Filestore
パッと見てすぐに分からなかった「Extend」と「Federate」について取り上げたいと思います。
Extend
CKANには拡張性があり、公開されているExtensionを利用することで様々な機能追加ができるようになっています。
Extentionは以下のサイトで検索することができます。
Federate
この機能は面白いなと思ったのですが、CKANではハーベスティング機能というものを利用して他のデータポータルからメタデータを取得することができるそうです。これにより、相互にデータを共有してFederated Network(*1)を作成することができるようになっています。
(*1)無理やり訳すと「連携ネットワーク」でしょうか。
例として「国のデータポータルが自治体のデータポータル情報を集約する」ことを想定している機能だそうです。
アーキテクチャ
CKANのアーキテクチャは以下の図のようになっています。
データはPostgreSQLに保存され、データ検索には全文検索システムのApache Solrが利用されています。
また、言語としては主にPythonで実装されており、フロントエンドではFlask、Jinja2、jQueryが利用されています。
インストールしてみる
では、少し実際に動かしてみるためにインストールしてみましょう。
インストール方法については、以下のドキュメントに「パッケージ」、「ソース」、「Docker Compose」でインストールする方法が記載されています。
今回はこのうちの「Docker Compose」でドキュメントに沿ってインストールを実施していきます。
ステップは1〜8まで記載されていますが、単純に起動して試すまでなら1〜4までで十分です。
1. 環境準備
Docker Composeを利用するので事前にDocker環境を準備しておく必要があります。
わたしの環境はMacOSなので、Docker Desktop for Macを導入済みです。また、ソースコードは以下で取得しておきます。
# gitからclone $ git clone https://github.com/ckan/ckan.git
2. Dockerイメージをビルド
次にDockerイメージをビルドします。環境設定ファイルをコピーして、イメージをビルドします。
コピーした環境設定ファイル.env
のCKAN_SITE_URL
については、自分の環境に合わせて修正しておきます。設定ファイルを修正したらイメージビルドをして完了するまで待ちましょう。
なお、わたしはCKAN_SITE_URL
はデフォルトのhttp://localhost:5000
のままとしました。
# 環境設定ファイルをコピー $ cd ckan $ cp contrib/docker/.env.template contrib/docker/.env # Dockerイメージのビルド $ cd contrib/docker $ docker-compose up -d --build
この段階でコンテナが立ち上がっているはずです。コンテナが立ち上がったら、後で利用するために各Docker Volumeのパスを変数化しておきます。(※後述しますが、このステップはスキップしても良いです)
なお、わたしはShellにfishを利用しているので下記のようになっていますが、通常はexport VOL_CKAN_HOME=$(docker ...
になるかと思います。
# 各ボリュームパスを変数化 $ export VOL_CKAN_HOME=(docker volume inspect docker_ckan_home | jq -r -c '.[] | .Mountpoint') $ echo $VOL_CKAN_HOME $ export VOL_CKAN_CONFIG=(docker volume inspect docker_ckan_config | jq -r -c '.[] | .Mountpoint') $ echo $VOL_CKAN_CONFIG $ export VOL_CKAN_STORAGE=(docker volume inspect docker_ckan_storage | jq -r -c '.[] | .Mountpoint') $ echo $VOL_CKAN_STORAGE
3. Datastore と datapusher
Datastore と datapusherを有効にする前に追加構成が必要なそうなので実施します。
$ docker exec ckan /usr/local/bin/ckan -c /etc/ckan/production.ini datastore set-permissions | docker exec -i db psql -U ckan
この次に下記コマンドでproduction.ini
の編集となる…、はずでしたが、以下のパスにvolumeとファイルが存在しません。
$ sudo vim $VOL_CKAN_CONFIG/production.ini
下記のIssueと同じ状況なのですが、取り急ぎコンテナ内で該当ファイルを編集することにしました。
# ckanコンテナに入る $ docker exec -it ckan /bin/bash # production.iniを編集 $ vim /etc/ckan/production.ini
ドキュメントに記載のとおり、ckan.plugins
にdatastore datapusher
を追加し、ckan.datapusher.formats
を有効化(コメントアウトを解除)します。
## Plugins Settings # Note: Add ``datastore`` to enable the CKAN DataStore # Add ``datapusher`` to enable DataPusher # Add ``resource_proxy`` to enable resorce proxying and get around the # same origin policy ckan.plugins = stats text_view image_view recline_view datastore datapusher
## Datapusher settings # Make sure you have set up the DataStore ckan.datapusher.formats = csv xls xlsx tsv application/csv application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet #ckan.datapusher.url = http://127.0.0.1:8800/ #ckan.datapusher.assume_task_stale_after = 3600
ファイルを保存したら、コンテナから抜けてckanコンテナを再起動します。
$ docker-compose restart ckan
再起動後に、最初に.env
に設定したCKAN_SITE_URL
配下のAPIにアクセスしてレスポンスがあるか確かめます。
$ curl 'http://localhost:5000/api/3/action/datastore_search?resource_id=_table_metadata' {"help": "http://localhost:5000/api/3/action/help_show?name=datastore_search", "success": true, "result": {"include_total": true, "limit": 100, "records_format": "objects", "resource_id": "_table_metadata", "total_estimation_threshold": null, "records": [], "fields": [{"id": "_id", "type": "int"}, {"id": "name", "type": "name"}, {"id": "oid", "type": "oid"}, {"id": "alias_of", "type": "name"}], "_links": {"start": "/api/3/action/datastore_search?resource_id=_table_metadata", "next": "/api/3/action/datastore_search?resource_id=_table_metadata&offset=100"}, "total": 0, "total_was_estimated": false}}
結果が返ってきました!なお、マシンスペックに依存するかもしれませんが、私の環境だと初回アクセス時にレスポンスが返ってくるまで10秒ぐらいは待ちました。
4. CKAN adminユーザの作成
最後に下記のコマンドで管理ユーザjohndoe
を追加します。
$ docker exec -it ckan /usr/local/bin/ckan -c /etc/ckan/production.ini sysadmin add johndoe 2021-09-17 14:59:08,406 INFO [ckan.cli] Using configuration file /etc/ckan/production.ini 2021-09-17 14:59:08,406 INFO [ckan.config.environment] Loading static files from public 2021-09-17 14:59:08,452 INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/venv/src/ckan/ckan/templates 2021-09-17 14:59:08,761 INFO [ckan.config.environment] Loading templates from /usr/lib/ckan/venv/src/ckan/ckan/templates User "johndoe" not found Create new user: johndoe? [Y/n]: Y Email address : johndoe@sample.com Password : Repeat for confirmation: Successfully created user: johndoe Added johndoe as sysadmin
最初にUser "johndoe" not found
が表示された後に止まったので「失敗したかな?」と思ったのですが、しばらく待つと新規ユーザの作成をするか聞かれるので、そのまま作成しましょう。なおパスワードは8文字以上必要なようです。
アクセスしてみる
では、インストールが完了したので実際にアクセスしてみましょう。
.env
に設定したCKAN_SITE_URL
にアクセスします。私はhttp://localhost:5000/
に設定したので、こちらにアクセスします。
すると、1分程度して下記の画面が表示されました!(このあたりはスペックに依存するかと思います)
うまく立ち上がっていますね。右上の「Log in」リンクから、先程作成したユーザjohndoe
でログインしてみましょう。
ログインも成功です。「News Feed」に先程サインアップ(ユーザー作成)した旨も表示されていますね。
なお、アバター画像を設定していないのに何故かアバターが表示されて不思議でしたが、これはGravatarと連携して表示されているようです。
また多言語表示にも対応しているので、画面右下から言語を切り替えれば「日本語」での表記に変わります。
この後の流れとしては、まずは「組織」を作成して、その組織配下に「データセット」を登録していく流れとなります。操作は簡単ですね。
まとめ
以上、オープンソースのデータ管理システム「CKAN」を試してみました。
使い方は非常に簡単でした。画面UIを見れば直感的にやるべきことが分かりますし、特に悩むポイントは無さそうです。標準機能だけでもデータ管理システム十分だと思いますし、拡張機能の導入によって必要な機能の追加ができるので、とても良いシステムだと思います。
注意点として、実際にCKANを試す場合にはそれなりのスペックの環境を用意してあげたほうが良さそうです。今回試した環境ではスペックが不足していたようで、動作はかなり重たい感じになってしまいました。
どなたかのお役に立てば幸いです。それでは!